home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / akcl / akcl1615.lha / aix3_mprotect / mprotect.c < prev    next >
C/C++ Source or Header  |  1990-11-08  |  1KB  |  61 lines

  1. /*
  2.  * mprotect (vaddr, nbytes, key)
  3.  *
  4.  * kernel extension for memory protecting pages
  5.  * in memory. 
  6.  * 
  7.  *
  8.  *
  9.  * return values:
  10.  *            0 - OK
  11.  *                otherwise failed.
  12.  */
  13.  
  14. #include <sys/vmuser.h>
  15. #include <sys/param.h>
  16. #include <sys/user.h>
  17. /* #include <sys/mstsave.h> */
  18. #define uptr 0x2ff98000
  19. #define EORGVADDR  0
  20.  
  21.  
  22. int sbrk();
  23.  
  24.  
  25. int
  26. mprotect(vaddr, nbytes, key)
  27. char * vaddr;
  28. int key,nbytes;
  29. {
  30.     int rc;
  31.     if (key != RDONLY
  32.         && key != UDATAKEY)
  33.       return -1;
  34.     if (nbytes < 0 ) return -1;
  35.     if (vaddr < 0x20000000)
  36.       vaddr = 0x20000000;
  37.     /* we MUST check for vaddr + nbytes > sbrk */
  38.     {char *tem = (char *)sbrk(0);
  39.      if (tem < (vaddr + nbytes))
  40.        nbytes = tem -vaddr;
  41.      if (nbytes < 0) return 0;
  42.        }
  43.        
  44.     rc = vm_protect(vaddr, nbytes , key);
  45.     return rc;
  46. }
  47.  
  48. int
  49. getfault()
  50. {
  51.  
  52. /*  struct mstsave * mst;
  53.     mst = (struct mstsave *) (&(((struct user * )(uptr))->u_save));
  54.     return (mst->except[EORGVADDR]);
  55. */
  56.        /* the fault address is 19'th word after the u */
  57.         return ((int *) uptr)[19];
  58. }
  59.  
  60.  
  61.